Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Προβλημα με την κωδικοποίηση χαρακτήρων...

Îåêßíçóå áðü ôï ìÝëïò DUDE!!. Τελευταία δημοσίευση από το μέλος panagiotis_georgiadis στις 22-05-2009, 02:04. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  19-05-2009, 21:39 50805

    Προβλημα με την κωδικοποίηση χαρακτήρων...

    Μέσω διαδυκτίου με Streamreader "τραβάω" μία σελίδα που είναι .txt. το προβλημα είναι ότι η κωδικοποίηση τησ σελίδας είναι ελληνική(iso-8859-7) και γιαυτό στο windows application μου το εμφανίζει με κινέζικα. γίνετε με κάποιον τρόπο να το κάνω να εμφανίζει και ελληνική κωδικοποίηση? ευχαριστώ.
  •  19-05-2009, 22:41 50807 σε απάντηση της 50805

    Απ: Προβλημα με την κωδικοποίηση χαρακτήρων...

    για βάλε αυτό κάπου στον κώδικά σου, υποθέτω c#,

    StreamReader sr = new StreamReader("myfile.txt",System.Text.Encoding.Default);

    και δες λίγο και αυτό να καταλάβεις το "System.Text.Encoding.Default"

    http://msdn.microsoft.com/en-us/library/system.text.encoding.default.aspx

    και αυτό το thread για περισσότερη βοήθεια

    http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/5a40110b-2ed4-4812-b30c-d0f6e31f4a41


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  19-05-2009, 23:29 50810 σε απάντηση της 50805

    Απ: Προβλημα με την κωδικοποίηση χαρακτήρων...

    Υποθέτωντας ότι:

    a) η εφαρμογή σου που διαβάζει το αρχείο είναι ήδη έτοιμη για Globalization (αν είναι WinForms δηλαδή πρέπει το κυρίως παράθυρο να έχει Localizable=true στα properties)

    b) Έχεις θέσει προγραμματιστικά κάπου στον κώδικα την γλώσσα του thread σε ελληνικά (με Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("el"); )

    μπορείς να κάνεις το εξής (γενικοποιώντας την απάντηση του nikolaosk)

    protected void ReadTextFromFile()
    {

       CultureInfo cinf = Thread.CurrentThread.CurrentUICulture;
       Encoding enc = Encoding.GetEncoding(cinf.EnglishName);
       StreamReader sr = new StreamReader(@"D:\lala.txt", enc);
       string str = sr.ReadToEnd();
       string snew = string.Format(CultureInfo.CurrentUICulture, "Το κείμενό σου είναι : {0}", str);

    }

    Προφανώς (ίσως μερικές φορές όχι και τόσο προφανές) προυποτίθεται ότι έχεις ελληνικό Language Pack στο λειτουργικό σύστημα ήδη.

    Το ότι το αρχείο σου είναι text και ότι το διαβάζεις μέσω internet, και εν τέλει το ότι το κείμενο διαβάζεται από αρχείο είναι εντελώς άσχετα. Μην το παίρνεται στραβά, απλά θέλω να επισημάνω πόσο βοηθάει ο τρόπος σκέψης στη λύση ενός προβλήματος.

    Αν απομονώσει κανείς τη λογική του τι θέλουμε να επιτύχουμε, είναι απλά η εμφάνιση ενός string με συγκεκριμένα χαρακτηριστικά. Το ενδιαφέρον αυτό χαρακτηριστικό είναι η κωδικοποίηση, που στην C# αντιπροσωπεύεται από την CultureInfo.

    Το κείμενο στην C# είναι αντικείμενα τύπου String, και η γλώσσα παρέχει την String.Format() που παίρνει σαν πρώτη παράμετρο ένα IFormatProvider που βρίσκεται εκεί για αυτή ακριβώς τη δουλειά.

    Άρα πιστεύω ότι αν διαβάσει κανείς καλά το MSDN στην καταχώρηση String Class members όλο και κάτι θα βρεθεί. (Κοιτώντας πίσω από το CultureInfo θα δει κανείς ότι υλοποιεί (implements) το interface IFormatProvider!)

     ___________________________
    [ Panos - Software Engineer ]
     ---------------------------


    Panagiotis Georgiadis
    HBM Netherlands B.V.
    www.twitter.com/HimWithCurls
  •  22-05-2009, 00:32 50880 σε απάντηση της 50810

    Απ: Προβλημα με την κωδικοποίηση χαρακτήρων...

    ευχαριστώ παιδια. το έκανα. thanks

  •  22-05-2009, 01:00 50881 σε απάντηση της 50880

    Απ: Προβλημα με την κωδικοποίηση χαρακτήρων...

    Να ρωτήσω τώρα κάτι άλλο. στο ίδιο προγραμμα. Θέλω να διαβάζω το κείμενο απο μία συγκεκριμένη λέξη και μετά. δλδ με κάποιον τρόπο να βρίσκω την λέξη και να μπορώ να αποθηκεύσω σε ένα string μόνο τους επόμενους π.χ. 20 χαρακτήρες μετά την συγκεκριμένη λέξη. Δοκίμασα να το κάνω με indexof αλλά το μόνο που καταφέρνω με αυτό είναι να βρώ άν υπάρχει η συγκεκριμένη λεξη στο κείμενο και όχι να μπορώ να αποθηκεύσω του χαρακτήρες που βρίσκονται αμέσως μετά την λέξη αυτή. υπάρχει κάποια λύση???
    ευχαριστώ
  •  22-05-2009, 02:04 50882 σε απάντηση της 50881

    Απ: Προβλημα με την κωδικοποίηση χαρακτήρων...

    Το πρόβλημα είναι και πάλι όχι τι θέλεις να κάνεις αλλά γιατί θέλεις να το κάνεις.

    Παράδειγμα: string strInput = "Σήμερα ο σκύλος μου έφαγε το φαγητό του και ύστερα τον πήγα βόλτα στο πάρκο";
    Θέλω μια συνάρτηση που να βρίσκει τη λέξη "σκύλος" και αν υπάρχει, να επιστρέφει τους 20 επόμενους χαρακτήρες.

    Το παράδειγμα που σου είχα στείλει διαβάζει όλο το αρχείο και επιστρέφει ένα και μοναδικό string με όλο το περιεχόμενο. Έτσι η strInput.IndexOf("σκύλος") θα σου επιστρέψει την τιμή 10, που είναι προφανές. Άρα μετά μπορείς να χρησιμοποιήσεις άνετα την string.Substring(10, 20) για να πάρεις αυτό που επιθυμείς.

    Μια άλλη λύση είναι να χρησιμοποιήσεις ένα loop που διαβάζει το κείμενό σου γραμμή προς γραμμή με το StreamReader.ReadLine(), ψάχνει στη γραμμή αυτή για το string, και βγαίνει από το loop όταν βρει το string που αναζητάς. Έτσι μπορείς να τερματίσεις λίγο νωρίτερα την αναζήτηση χωρίς να χρειάζεται να διαβάζεις πάντα όλο το αρχείο (= μικρή βελτίωση ταχύτητας). Αυτό εξαρτάται βέβαια προπάντων από τη μορφή του αρχείου σου.

    Ίσως όμως να μην έχω πιάσει ακριβώς το πρόβλημά σου. Δεν καταλαβαίνω γιατί κόλλησες στην IndexOf. Με το Visual Studio έχεις AutoComplete, οπότε πάντα μπορείς να δεις τι μεθόδους έχει ένα αντικείμενο (π.χ. string) αφού πληκτρολογήσεις το όνομα του αντικειμένου ακολουθούμενο από τελεία ('.')
    Και το να παίξεις με όλες τις μεθόδους που προσφέρονται είναι μέσα στο παιχνίδι, ούτως ή άλλως δεν βιάζεσαι (γι'αυτό άλλωστε είμαστε στο forum "Πρώτα βήματα...")


    Panagiotis Georgiadis
    HBM Netherlands B.V.
    www.twitter.com/HimWithCurls
    Δημοσίευση στην κατηγορία:
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems